package com.vehiclemanagement.advice;

import lombok.extern.slf4j.Slf4j;
import org.springframework.core.MethodParameter;
import org.springframework.http.MediaType;
import org.springframework.http.server.ServerHttpRequest;
import org.springframework.http.server.ServerHttpResponse;
import org.springframework.web.bind.annotation.ControllerAdvice;
import org.springframework.web.servlet.mvc.method.annotation.ResponseBodyAdvice;
import springfox.documentation.spring.web.json.Json;

/**
 * Swagger参数处理增强类
 * 用于处理Swagger API文档生成过程中的参数处理问题
 */
@Slf4j
@ControllerAdvice
public class SwaggerParameterAdvice implements ResponseBodyAdvice<Object> {

    @Override
    public boolean supports(MethodParameter returnType, Class converterType) {
        // 只处理Swagger API文档响应
        return returnType.getParameterType().equals(Json.class);
    }

    @Override
    public Object beforeBodyWrite(Object body, MethodParameter returnType, 
                                 MediaType selectedContentType,
                                 Class selectedConverterType, 
                                 ServerHttpRequest request,
                                 ServerHttpResponse response) {
        // 如果是Swagger文档，在返回前记录日志
        if (body instanceof Json) {
            log.debug("Swagger API文档生成完成");
            
            // 在这里我们只记录日志，更复杂的处理需要修改Json内容
            // 由于Json类是不可变的，实际修改需要通过反射或其他方式实现
            // 这里仅作为一个监控点，实际修复通过SwaggerNumberConfig和SwaggerParameterFilter完成
            
            String uri = request.getURI().toString();
            if (uri.contains("/v2/api-docs")) {
                log.info("Swagger API文档请求: {}", uri);
            }
        }
        
        return body;
    }
} 